package com.http.cortroller;

import com.http.util.KindEditorResult;
import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileOutputStream;

import static java.lang.System.out;

@Controller
public class KindEditor {
    @RequestMapping("/upload")
    @ResponseBody
    public KindEditorResult uploadImgs(HttpServletRequest request,
                                      @RequestParam("imgFile") MultipartFile imgFile, Model model, KindEditorResult kindEditorResult) {
        KindEditorResult result = new KindEditorResult();
        StringBuffer url = new StringBuffer(); //存放返回url地址的容器
        String imagePath = null;
        String realPath = null;
        String fileName = null;
        File directory = null;
        String destFileName = null;

        try {
            //2.根据时间戳创建新的文件名，这样即便是第二次上传相同名称的文件，也不会把第一次的文件覆盖了
            fileName = System.currentTimeMillis() + imgFile.getOriginalFilename();
            //3.通过req.getServletContext().getRealPath("") 获取当前项目的真实路径，然后拼接前面的文件名
            directory = new File("src\\main\\resources\\img\\");
            imagePath = directory.getCanonicalPath();
//            out.println(imagePath);
            realPath = System.getProperty("user.dir");
            destFileName = realPath + "\\src\\main\\resources\\img" + File.separator + fileName;
            //4.第一次运行的时候，这个文件所在的目录往往是不存在的，这里需要创建一下目录（创建到了webapp下uploaded文件夹下）
//            System.err.println(destFileName);
            File destFile = new File(destFileName);
            destFile.getParentFile().mkdirs();
            //5.把浏览器上传的文件复制到希望的位置
//             imgFile.transferTo(destFile);
            //6.把文件名放在model里，以便后续显示用
            model.addAttribute("fileName", fileName);
            // 接着创建对应的实体类，将以下路径进行添加，然后通过数据库操作方法写入
            result.setUrl("/img/" + fileName);
            result.setError(kindEditorResult.getError());
            result.setMessage(kindEditorResult.getMessage());
            /*添加数据*/
            model.addAttribute("file", fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        out.println(request.getScheme());
        //获取返回的url
//       url
//               .append("://") //相当于http://
//               .append(request.getServerName()) //相当于http://localhost
//                .append(":")//相当于http://localhost:
//                .append(request.getServerPort());//相当于http://localhost:8080
//                url.append(request.getContextPath()) //获取该tomcat容器的路径
//               url .append(imagePath); //相当于http://localhost:8080/项目容器/blogimage+日期
        try {
            IOUtils.write(imgFile.getBytes(), new FileOutputStream(new File(realPath + "/src/main/resources/img", fileName))); //存image图片到该realPath路径中
//           IOUtils.write(imgFile.getBytes(), new FileOutputStream(new File(realPath + "/target/classes/img", fileName))); //存image图片到该realPath路径中

//            url .append("\\")//相当于http://localhost:8080/项目容器/
//            url .append(destFileName);//相当于http://localhost:8080/项目容器/图片名称
            out.println(url);
            return new KindEditorResult(0,url.toString(),"上传成功！"); //0上传成功后返回图片地址
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new KindEditorResult(1,"","上传失败！"); //1上传失败后返回图片地址
    }
















    @RequestMapping("/uploadImg")
    @ResponseBody
    public KindEditorResult uploadImg(HttpServletRequest request,
                                @RequestParam("imgFile") MultipartFile imgFile, Model model, KindEditorResult kindEditorResult) {
        KindEditorResult result = new KindEditorResult();
        StringBuffer url = new StringBuffer(); //存放返回url地址的容器
        String imagePath = null;
        String realPath = null;
        String fileName = null;
        File directory = null;
        String destFileName = null;

        try {
            //2.根据时间戳创建新的文件名，这样即便是第二次上传相同名称的文件，也不会把第一次的文件覆盖了
            fileName = System.currentTimeMillis() + imgFile.getOriginalFilename();
            //3.通过req.getServletContext().getRealPath("") 获取当前项目的真实路径，然后拼接前面的文件名
            directory = new File("src\\main\\resources\\img\\");
            imagePath = directory.getCanonicalPath();
//            out.println(imagePath);
            realPath = System.getProperty("user.dir");
            destFileName = realPath + "\\src\\main\\resources\\img" + File.separator + fileName;
            //4.第一次运行的时候，这个文件所在的目录往往是不存在的，这里需要创建一下目录（创建到了webapp下uploaded文件夹下）
//            System.err.println(destFileName);
            File destFile = new File(destFileName);
            destFile.getParentFile().mkdirs();
            //5.把浏览器上传的文件复制到希望的位置
//             imgFile.transferTo(destFile);
            //6.把文件名放在model里，以便后续显示用
            model.addAttribute("fileName", fileName);
            // 接着创建对应的实体类，将以下路径进行添加，然后通过数据库操作方法写入
            result.setUrl("/img/" + fileName);
            result.setError(kindEditorResult.getError());
            result.setMessage(kindEditorResult.getMessage());
            /*添加数据*/
            model.addAttribute("file", fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        out.println(request.getScheme());
        url.append(request.getScheme()) //相当于http
                .append("://") //相当于http://
                .append("localhost:") //相当于http://localhost
                .append(request.getServerPort())//相当于http://localhost:8080
                .append("/")
//                .append(request.getContextPath()) //获取该tomcat容器的路径
                .append(fileName); //相当于http://localhost:8080/项目容器
        try {
            IOUtils.write(imgFile.getBytes(), new FileOutputStream(new File(realPath + "/src/main/resources/img", fileName))); //存image图片到该realPath路径中
            IOUtils.write(imgFile.getBytes(), new FileOutputStream(new File(realPath + "/target/classes/img", fileName))); //存image图片到该realPath路径中
//            url.append("\\")//相当于http://localhost:8080/项目容器/
//                    .append(fileName);//相当于http://localhost:8080/项目容器/图片名称
            out.println(url);
            return new KindEditorResult(0,url.toString(),"上传成功！"); //0上传成功后返回图片地址
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new KindEditorResult(1,"","上传失败！"); //1上传失败后返回图片地址
    }



   /*访问页面*/
    @RequestMapping("/info")
    public String info(String KindEditor, Model model) {

        return "day.html";
    }


    /*访问页面*/
    @RequestMapping("/infoImg")
    public String infoImg(String KindEditor, Model model) {

        return "info";
    }
}

